/*
This file is part of La Linea.

La Linea is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

La Linea is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with La Linea.  If not, see <http://www.gnu.org/licenses/>.
*/

#include "Vector2f.h"

Vector2f::Vector2f(void)
{
	Vector2f(x,y);
}

Vector2f::Vector2f(GLfloat x, GLfloat y)
{
	this->x = x;
	this->y = y;
}

Vector2f::Vector2f(const Vector2f &v){
	this->x = v.x;
	this->y = v.y;
}

Vector2f& Vector2f::operator=(const Vector2f& v){
	this->x = v.x;
	this->y = v.y;

	return *this;
}

Vector2f& Vector2f::operator+= (const Vector2f& v){
	this->x += v.x;
	this->y += v.y;

	return *this;
}

Vector2f Vector2f::operator+ (const Vector2f& v){
	Vector2f t = *this;
	t += v;
	return t;
}

Vector2f& Vector2f::operator-= (const Vector2f& v){
	this->x -= v.x;
	this->y -= v.y;

	return *this;
}

Vector2f Vector2f::operator- (const Vector2f& v){
	Vector2f t = *this;
	t -= v;
	return t;
}

Vector2f& Vector2f::operator*= (const Vector2f& v){
	this->x *= v.x;
	this->y *= v.y;

	return *this;
}

Vector2f Vector2f::operator* (const Vector2f& v){
	Vector2f t = *this;
	t *= v;
	return t;
}

Vector2f& Vector2f::operator/= (const Vector2f& v){
	this->x *= v.x;
	this->y *= v.y;

	return *this;
}

Vector2f Vector2f::operator/ (const Vector2f& v){
	Vector2f t = *this;
	t *= v;
	return t;
}

Vector2f operator*(const GLfloat a, const Vector2f& v){
	return Vector2f(v.x*a,v.y*a);
}

Vector2f operator/(const Vector2f& v,const GLfloat a){
	return Vector2f(v.x/a,v.y/a);
}

double Vector2f::length() const {
	return sqrt(this->x*this->x + this->y*this->y);
}

Vector2f & Vector2f::normalize(){
	GLfloat l = (GLfloat)this->length();
	this->x = this->x/l;
	this->y = this->y/l;
	return (*this);
}
